﻿@page "/about"

<h2>About</h2>


<p>protobuf-net is a long-standing .NET implementation of Google's "protocol buffers" (ProtoBuf) binary serialization format.</p>
<p>
    Traditionally, ProtoBuf uses a DSL ("proto2" or "proto3") to define document schemas. Breaking with tradition, protobuf-net
    doesn't force you to use schemas - being perfectly happy to work with POCO objects. However, if you <em>use</em> schemas, tools
    should be available to help you generate suitable POCOs from your schema.
</p>
<p>
    protobuf-net <em>has had</em> tools to do this, but they have always been a hack - behind the scenes, "protogen" used Google's "protoc"
    tool to parse the model and compile it as a protobuf object, then deserialized the binary, then re-serialized it as xml, then ran
    the xml through xslt stylesheets. It worked, but... damn. This was very bad for cross-platform work: "protoc" is an OS-specific binary
    executable, and xslt has poor support in .NET cross-platform. Additionally, the tooling had lapsed and "proto3" had neven been implemented.
    Finally, the generated code has not been updated to use language improvements from multiple C# releases.
</p>
<p>As part of protobuf-net 2.3.0, I'm dusting off the DSL tools; aims:</p>
<ul>
    <li>100% managed - no executables</li>
    <li>modern C# output</li>
    <li>full proto2 &amp; proto3 support</li>
    <li>&hellip; and just &hellip; better in every way than what I had before</li>
</ul>
<p>It is far from complete, but: I'm getting there!</p>
<h3>Why is this a website?</h3>
<p>Because that is just a convenient way for me to play with it. Long term I would expect to have compile-time command-line options that work via
    <code>dotnet build</code> or whatever you want; I don't have that today. As for "why is this under your personal domain?": because domain names
    and hosting cost money, and my own domain already existed. It works.</p>
<h3>Holy hell this site is ugly!</h3>
<p>Yes. I'm a tools &amp; infrastructure person; I don't do pretty. If you can do better, feel free
    to submit a PR; <a href="https://github.com/protobuf-net/protobuf-net/tree/master/src/protogen.site">the code is right here</a>.</p>

<h3>External tools</h3>
<p>This site optionally makes use of &quot;protoc&quot;, Google's protocol buffers compiler; the protoc tool is licensed by Google as part
    of protocol buffers, with full terms <a href="https://github.com/protocolbuffers/protobuf/blob/master/LICENSE">available here</a>.</p>
